דף הבית  >> 
 >> 

הרשם  |  התחבר


LINQ - Language-Integrated Query 

מאת    [ 29/12/2010 ]

מילים במאמר: 1101   [ נצפה 2521 פעמים ]


LINQ המילה LINQ מייצגת ראשי תיבות של Language-Integrated Query, ומאפשרת לתשאל נתונים מתוך שפות התכנות של .net באופן דומה לזה שבו מאפשרת SQL  לתשאל נתונים מבסיס הנתונים. שפת השאילתות LINQ מאפשרת לגשת ולתשאל מגוון רחב של מקורות הבנויים על בסיס VB.NET או C#. המקורות כוללים אוספים בקוד שלך, קבצי XML, .NET DataSets ובסיסי נתונים. במאמר זה נעסוק ב- LINQ to SQL, אותו רכיב של LINQ שמאפשר לתשאל בסיסי נתונים מסוג SQL SERVER של מיקרוסופט. LINQ אינה רק תוספת שמהווה חלק מסביבת העבודה .NET השפה LINQ תוכננה ויושמה כחלק ממשי של שפות התכנות ב-.NET פירוש הדבר ש-LINQ משולבת באמת לתוך .NET  ונותנת דרך מאוחדת לתשאל נתונים מבלי להתחשב במקור הנתונים. בנוסף, מכיוון שהיא משולבת לתוך השפה ולא בסוג פרויקט מסוים, LINQ זמינה לכל סוגי הפרוייקטים כולל יישומי אינטרנט, יישומי טפסי Windows, יישומי Console, ועוד. התחביר של LINQ דומה לזה של SQL, שפת השאילתות הפופולרית ביותר עבור בסיסי נתונים טבלאיים. פירוש הדבר, שכדי לקבל נתונים ממקור נתונים, משתמשת LINQ במילות מפתח כמו Select, From ו-Where.
כדי לקבל מושג כיצד נראית שאילתת LINQ, לפניך דוגמה שמציגה רשימה של אנשים ששמם מתחיל באות א': Using System.Linq; … String[] authors = new string[]{"אבי","רועי","אהרון","נדב","גיא"}; var result = from author in authors
                   where author.StartsWith("א")
                   select author; foreach (var author in result)
{
            Label1.Text += author + "
";
}

LINQ to SQL עם LINQ to SQL אפשר לקחת קבוצת אובייקטים של בסיס נתונים, טבלאות למשל, ולהפוך אותם לאובייקטים של .NET שאליהם אפשר לגשת מתוך הקוד. ביכולתך להשתמש אז באובייקטים אלה בשאילתות או להשתמש בהם ישירות בתרחישי קשירת נתונים – data binding. התוכנה VWD כוללת את המעצב object-relational שמאפשר ליצור מודל אובייקטים שנגיש דרך קוד שמבוסס על טבלאות בסיס הנתונים. ע"י גרירת טבלאות אל מעצב זה, VWD יוצרת קוד שמאפשר לגשת לנתוני היסוד בבסיס הנתונים מבלי שתצטרך לכתוב קוד רב.
הטבלאות שאתה גורר אל המעצב מאוחסנות בקובץ dbml ובקבצי הקוד ברקע שלו. קבצים אלה מכילים מחלקה שיורשת מ-DataContext, הישות העיקרית ב- LINQ to SQL שמספקת גישה לבסיס הנתונים. המעצב חכם דיו כדי לגלות  את הקשרים בבסיס הנתונים, ולכן הוא מסוגל ליצור את הקשרים הנחוצים גם בקוד.
הצגת תחביר השאילתה אופרטורי שאילתה תקניים
LINQ תומכת במספר גדול של אופרטורים של שאילתה – מילות מפתח שמאפשרות לבחור, לסדר או לסנן את הנתונים שיוחזרו מהשאילתה. Select
מילת המפתח Select משמשת לאחזור אובייקטים מהמקור שאותו מתשאלים.
בדוגמה הבאה תראה כיצד לבחור אובייקט מסוג קיים. מאוחר יותר נלמד כיצד להגדיר צורות אובייקטים חדשות תוך כדי ביצוע. var allReviews = from r in myDataContext.Reviews
                          select r; המשתנה 'r' בדוגמה זו הוא משתנה שזמין רק בתוך השאילתה הנוכחית. משתנה זה מוצג בדרך כלל בפסקת Form, ומשתמשים בו שוב בפסקת Where ו-Select כדי לסנן נתונים וכדי לציין את הנתונים שברצונך לבחור. למרות שבאפשרותך לבחור למשתנה כל שם שתרצה, הרי שלעתים קרובות תראה משתנים בעלי שם של אות אחת כמו 'r' או שהשם הוא צורת היחיד של האוסף שאותו מתשאלים (כמו בדוגמא, r במקום review). From
From אינו נחשב לאופרטור שאילתה תקני מכיוון שאינו פעיל על הנתונים אלא מצביע עליהם. למרות זאת, הפסקה From היא גורם חשוב בשאילתת LINQ מכיוון שהיא קובעת את שם האוסף או שם מקור הנתונים שהשאילתה חייבת לפעול עליו. Order By
הפסקה Order By מאפשרת למיין את הפריטים באוסף התוצאה. לאחר Order By יכולות לבוא מילות המפתח Ascending או Descending שמציינות את סדר המיון.
אפשר לציין קריטריונים רבים על ידי הפרדתם בפסיק זה מזה. השאילתה הבאה מחזירה רשימה של סגנונות שממוינים תחילה לפי SortOrder בסדר יורד, ואז ממוינים לפי Name בסדר עולה. var allGenres = from g in myDataContext.Geners
                         orderby g.SortOrder descending, g.Name
                         select g; Where
הפסקה Where ב-LINQ בדיוק כמו הפסקהWHERE  ב- SQL, מאפשרת לסנן את האובייקטים שמוחזרים על ידי השאילתה. השאילתה הבאה מחזירה את כל הסקירות המורשות: var allReviews = form r in myDataContext.Revies
                           where r.Authorized  ==  true
                           select r;
Sum, Min, Average ו- Count
אופרטורי צבירה אלה מאפשרים לבצע חישובים מתמטיים על האובייקטים שבקבוצת התוצאה. לדוגמה, כדי לאחזר את SortOrder הממוצע עבור כל הסגנונות, תוכל לבצע את השאילתה הבאה: var average = (from g in myDataContext.Geners                         select g.SortOrder).Average(); שים לב שהשיטה Average חלה על קבוצת התוצאה כולה. לכן, יש לעטוף את המשפט כולו בסוגריים ובעקבותיהם תבוא קריאה לשיטה Average. ללא הסוגריים תקבל שגיאה.
באופן דומה תוכל לאחזר בדרך זו את מספר הסקירות: var numberOfReviews = (from r in myDataContext.Reviews                         select r).Count();

Take, Skip, TakeWhile ו- SkipWhile
Take ו- Skip מאפשרות לבצע בחירות-משנה בתוך קבוצת התוצאה. הדבר מתאים ביותר לתרחישי דפדןף שבהם הרשומות מאוחזרות עבור הדף הנוכחי בלבד. Take אוספת כמות של אלמנטים מקבוצת התוצאה ומתעלמת מהשאר, בעוד Skip מדלגת על מספר אלמנטים המבוקשים ומחזירה את הבאים.

הדוגמא הבאה מראה כיצד לאחזר את דף הרשומות השני, כאשר מוגדר שגודל דף הוא 10: var allRevies = (from r in myDataContext.Reviews
                        select r).Skip(10).Take(10); בדיוק כמו במקרה של Average, השאילתה עטופה בזוג סוגריים ובעקבותיהם באה הקריאה ל-Skip ו- Take להשיג את הרשומות המבוקשות. Single ו- SingleOrDefault
האופרטורים Single ו- SingleOrDefault מאפשרים להחזיר אובייקט יחיד כמופע בעל סוג מובהק. הדבר שימושי כשידוע שהשאילתה מחזירה רשומה אחת בדיוק. לדוגמה, כשמאוחזרת רשומה לפי ID הייחודי שלה. הדוגמה הבאה מאחזרת מבסיס הנתונים את הסקירה בעלת ID שערכו 22: var review22 = (from r in myDataContext.Reviews
                          where r.Id == 22
                          select r).Single(); אם הפריט המבוקש לא נמצא, או כאשר השאילתה מחזירה יותר ממופע אחד, יעורר האופרטור Single שגיאה. אם רצונך שהשיטה תחזיר ריק(null) או את ערך ברירת המחדל עבור סוג הנתונים הרלוונטי (כמו 0 עבור Integer, False עבור בוליאני וכו'), השתמש ב-SingleOrDefault. למרות שבבסיס הנתונים קיימת רק סקירה אחת בעלת Id שערכו 22, הרי שאם תשמיט את הקריאה ל-Single, עדיין תקבל רשימת סקירות (שמחזיקה אלמנט אחת בלבד). השימוש ב-Single כופה החזר של מופע יחיד מהסוג שאתה מתשאל לגביו. First, FirstOrDefault, Last ו-   LastOrDefault
אופרטורים אלה מאפשרים להחזיר את האיבר הראשון או האחרון בסדרה נתונה של אובייקטים. בדיוק כמו עם האופרטור Single, גם First ו- Last מעוררים שגיאה כשהאוסף ריק, בעוד שני האופרטורים האחרים מחזירים את ערך ברירת המחדל עבור סוגי הנתונים הרלוונטיים. בניגוד ל-Single, האופרטורים First, FirstOrDefault, Last ו- LastOrDefault אינם מעוררים שגיאה כשהשאילתה מחזירה יותר מפריט אחד.

לרוע המזל, האופרטורים Last ו- LastOrDefault אינם נתמכים ב- LINQ to SQL. עם זאת, תוכל בקלות להשלים את אותה התנהגות עם First וסדר מיון יורד. קטע הקוד הבא מראה כיצד לאחזר מבסיס הנתונים את הסקירה הישנה ביותר ואת הסקירה החדשה ביותר: var firstReview = (from r in myDataContext.Reviews
                             orderby r.Id
                             select r).First(); var lastReview = (from r in myDataContext.Reviews
                            orderby r.Id descending
                            select r).First();


המאמר נכתב ע"י  www.ssw.co.il

בברכה,


נאור שלומי - סנאפשוט בניית אתרים בהתאמה אישית.
נייד:054-4889474
מייל:href="mailto:Naor@ssw.co.il" Naor@ssw.co.il">target="_blank">Naor@ssw.co.il
 אתר:www.ssw.co.il




מאמרים חדשים מומלצים: 

חשיבות היוגה לאיזון אורח חיים יושבני  -  מאת: מיכל פן מומחה
היתרונות של עיצוב בית בצורת L -  מאת: פיטר קלייזמר מומחה
לגלות, לטפח, להצליח: חשיבות מימוש פוטנציאל הכישרון לילדים עם צרכים מיוחדים -  מאת: עמית קניגשטיין מומחה
המדריך לניהול כלכלת משק בית עם טיפים ועצות לניהול תקציב -  מאת: נדב טל מומחה
חשבתם שרכב חשמלי פוטר מטיפולים.. תחשבו שוב -  מאת: יואב ציפרוט מומחה
מה הסיבה לבעיות האיכות בעולם -  מאת: חנן מלין מומחה
מערכת יחסים רעילה- איך תזהו מניפולציות רגשיות ותתמודדו איתם  -  מאת: חגית לביא מומחה
לימודים במלחמה | איך ללמוד ולהישאר מרוכז בזמן מלחמה -  מאת: דניאל פאר
אימא אני מפחד' הדרכה להורים כיצד תוכלו לנווט את קשיי 'מצב המלחמה'? -  מאת: רזיאל פריגן פריגן מומחה
הדרך שבה AI (בינה מלאכותית) ממלאת את העולם בזבל דיגיטלי -  מאת: Michael - Micha Shafir מומחה

מורנו'ס - שיווק באינטרנט

©2022 כל הזכויות שמורות

אודותינו
שאלות נפוצות
יצירת קשר
יתרונות לכותבי מאמרים
מדיניות פרטיות
עלינו בעיתונות
מאמרים חדשים

לכותבי מאמרים:
פתיחת חשבון חינם
כניסה למערכת
יתרונות לכותבי מאמרים
תנאי השירות
הנחיות עריכה
תנאי שימוש במאמרים



מאמרים בפייסבוק   מאמרים בטוויטר   מאמרים ביוטיוב